托普利兹矩阵。
解答1[Java]:
核心思想
使用 (r, c)
表示行号和列号,r-c
相同的元素是在同一条对角线上的,可以看作同一组。使用一个 HashMap 存储每个组的值,然后依次遍历元素,根据 r-c
算出来他所在的组,然后判断其值和其所在组的值是否一致。
代码
class Solution {
public boolean isToeplitzMatrix(int[][] matrix) {
HashMap<Integer, Integer> groups = new HashMap<>();
for (int r = 0; r < matrix.length; ++r) {
for (int c = 0; c < matrix[0].length; ++c) {
if (!groups.containsKey(r - c))
groups.put(r - c, matrix[r][c]);
else if (groups.get(r - c) != matrix[r][c])
return false;
}
}
return true;
}
}
解答2[Java]:
核心思想
依次遍历元素,然后判断其值和其坐上方元素的值是都一样,如果不一样,就返回 false,如果遍历顺利完成,返回 true。判断其左上方元素的时候要确保 r > 0
和 c > 0
以保证数组不会越界。
代码
class Solution {
public boolean isToeplitzMatrix(int[][] matrix) {
for (int r = 0; r < matrix.length; ++r) {
for (int c = 0; c < matrix[0].length; ++c) {
if (r > 0 && c > 0 && matrix[r - 1][c - 1] != matrix[r][c]) {
return false;
}
}
}
return true;
}
}